package com.itboye.hutouben.phouto;

import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;

import com.itboye.hutouben.R;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;


/**
 * 单张图片显示Fragment   (可下载图片)
 */
public class ImageDetailFragment extends Fragment {
	private String mImageUrl;
	private ImageView mImageView;
	private ProgressBar progressBar;
	private PhotoViewAttacher mAttacher;

	Bitmap bitmap;
	public static ImageDetailFragment newInstance(String imageUrl) {
		final ImageDetailFragment f = new ImageDetailFragment();

		final Bundle args = new Bundle();
		args.putString("url", imageUrl);
		f.setArguments(args);

		return f;
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		mImageUrl = getArguments() != null ? getArguments().getString("url") : null;
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		final View v = inflater.inflate(R.layout.image_detail_fragment, container, false);
		mImageView = (ImageView) v.findViewById(R.id.image);
		mAttacher = new PhotoViewAttacher(mImageView);

		mAttacher.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() {

			@Override
			public void onPhotoTap(View arg0, float arg1, float arg2) {
//				getActivity().finish();
			}
		});

		progressBar = (ProgressBar) v.findViewById(R.id.loading);

		mAttacher.setOnLongClickListener(new View.OnLongClickListener() {
			@Override
			public boolean onLongClick(View v) {

				AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
				builder.setItems(new String[]{getResources().getString(R.string.save_picture)}, new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						//加入网络图片地址
						new Task().execute(mImageUrl);
						Toast.makeText(getActivity(), "图片保存", Toast.LENGTH_SHORT).show();
					}
				});
				builder.show();
				return true;
			}
		});
		return v;
	}
	/**
	 * 异步线程下载图片
	 */
	class Task extends AsyncTask<String, Integer, Void> {

		protected Void doInBackground(String... params) {
			bitmap=GetImageInputStream((String)params[0]);
			return null;
		}

		protected void onPostExecute(Void result) {
			super.onPostExecute(result);
			Message message=new Message();
			message.what=0x123;
			handler.sendMessage(message);
		}

	}
	Handler handler=new Handler(){
		public void handleMessage(android.os.Message msg) {
			if(msg.what==0x123){
				//点击图片后将图片保存到SD卡跟目录下的Test文件夹内
				SavaImage(bitmap, Environment.getExternalStorageDirectory().getPath()+"/htbs");
			}
		};
	};
	/**
	 * 保存位图到本地
	 * @param bitmap
	 * @param path 本地路径
	 * @return void
	 */
	public void SavaImage(Bitmap bitmap, String path){
		File file=new File(path);
		FileOutputStream fileOutputStream=null;
		//文件夹不存在，则创建它
		if(!file.exists()){
			file.mkdir();
		}
		try {
			fileOutputStream=new FileOutputStream(path+"/"+System.currentTimeMillis()+".png");
			bitmap.compress(Bitmap.CompressFormat.JPEG, 100,fileOutputStream);
			fileOutputStream.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

		// 其次把文件插入到系统图库
		try {
			MediaStore.Images.Media.insertImage(getActivity().getContentResolver(),
					file.getAbsolutePath(), path+"/"+System.currentTimeMillis()+".png", null);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		// 最后通知图库更新
		getActivity().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + path)));
	}
	/**
	 * 获取网络图片
	 * @param imageurl 图片网络地址
	 * @return Bitmap 返回位图
	 */
	public Bitmap GetImageInputStream(String imageurl){
		URL url;
		HttpURLConnection connection=null;
		Bitmap bitmap=null;
		try {
			url = new URL(imageurl);
			connection=(HttpURLConnection)url.openConnection();
			connection.setConnectTimeout(6000); //超时设置
			connection.setDoInput(true);
			connection.setUseCaches(false); //设置不使用缓存
			InputStream inputStream=connection.getInputStream();
			bitmap= BitmapFactory.decodeStream(inputStream);
			inputStream.close();

		} catch (Exception e) {
			e.printStackTrace();
		}
		return bitmap;
	}


	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		super.onActivityCreated(savedInstanceState);

		ImageLoader.getInstance().displayImage(mImageUrl, mImageView, new SimpleImageLoadingListener() {
			@Override
			public void onLoadingStarted(String imageUri, View view) {
				progressBar.setVisibility(View.VISIBLE);
			}

			@Override
			public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
				String message = null;
				switch (failReason.getType()) {
					case IO_ERROR:
						message = "下载错误";
						break;
					case DECODING_ERROR:
						message = "图片无法显示";
						break;
					case NETWORK_DENIED:
						message = "网络有问题，无法下载";
						break;
					case OUT_OF_MEMORY:
						message = "图片太大无法显示";
						break;
					case UNKNOWN:
						message = "未知的错误";
						break;
				}
				Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show();
				progressBar.setVisibility(View.GONE);
			}

			@Override
			public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
				progressBar.setVisibility(View.GONE);
				mAttacher.update();
			}
		});
	}
}
